package com.eshanren.ext.base;

import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 校验器基类
 *
 * @author WWF
 */
public abstract class BaseValidator extends Validator {


    /**
     * 文件最大值 1GB
     */
    protected static long FILE_MAX_SIZE = 1024 * 1024 * 1024;

    /**
     * 标志位
     */
    public static final String SUCCESS = "success";

    /**
     * 提示消息
     */
    public static final String MESSAGE = "message";


    @Override
    protected void validate(Controller c) {
        setShortCircuit(true);
    }

    @Override
    protected void handleError(Controller c) {
        c.setAttr(SUCCESS, false);
        c.renderJson();
    }

    /**
     * 正则表*
     */
    protected static final Map<String, String> REGEX_MAP = new HashMap<String, String>() {{
        //手机 13/14/15/18开头共11位
        put("phone", "^[1][3,4,5,7,8][0-9]{9}$");
        //验证码 6位数字，首位不为0
        put("code", "^[0-9]{6}$");
        //密码 非空字符6-16位
        put("password", "^[\\S]{6,16}$");
        //数字 至少一位
        put("number", "^\\d{1,}$");
        //两位小数（金额）
        put("decimalAmount", "^(0\\.((0[1-9])|([1-9]\\d?)))|([1-9]\\d*(\\.\\d{1,2})?)$");
        //正整数
        put("integerAmount", "^[1-9]{1}\\d*$");
        //100的倍数
        put("hundredAmount", "^[1-9]{1}\\d*00$");
        //身份证
        put("idcard", "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|1[012])((0[1-9])|([12]\\d)|(3[01]))\\d{3}?[\\dxX]$");
        //数字长度
        put("numberLength", "^\\d{MIN,MAX}$");
        //帐号 数字与字母的组合
        put("account", "(^[0-9]+[a-zA-Z]+[0-9a-zA-Z]*$)|(^[a-zA-Z]+[0-9]+[0-9a-zA-Z]*$)");
    }};

    /**
     * 自定义正则验证
     *
     * @param value
     * @param type
     */
    protected boolean validateCustomRegex(String value, String type) {
        Pattern pattern = Pattern.compile(REGEX_MAP.get(type));
        Matcher matcher = pattern.matcher(value);
        return matcher.matches();
    }

}
